%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Check_Materials(MATERIALS)

% MATERIALS (карточка MAT1) | .card | .ID | .Patran_name | .E | .G | .NU | .RHO | .A | .TREF | .GE | .ST | .SC | .SS | .MCSID |
% MATERIALS (карточка MAT2) | .card | .ID | .Patran_name | .G11 | .G12 | .G13 |
%                                                               | .G22 | .G23 |
%                                                                      | .G33 |
%                                                                      | .RHO | .A1 | .A2 | .A3 | .TREF | .GE | .ST | .SC | .SS | .MCSID | .GE11 | .GE12 | .GE13 | .GE22 | .GE23 | .GE33 |
% MATERIALS (карточка MAT8) | .card | .ID | .Patran_name | .E1 | .E2 | .NU12 | .G12 | .G1Z | .G2Z | .RHO | .A1 | .A2 | .TREF | .Xt | .Xc | .Yt | .Yc | .S | .GE | .F12 | .STRN |
% MATERIALS (карточка MAT9) | .card | .ID | .Patran_name | .G11 | .G12 | .G13 | .G14 | .G15 | .G16 |
%                                                               | .G22 | .G23 | .G24 | .G25 | .G26 |
%                                                                      | .G33 | .G34 | .G35 | .G36 |
%                                                                             | .G44 | .G45 | .G46 |
%                                                                                    | .G55 | .G56 |
%                                                                                           | .G66 |
%                                                                                           | .RHO | .A1 | .A2 | .A3 | .A4 | .A5 | .A6 | .TREF | .GE | .GE11 | .GE12 | .GE13 | .GE14 | .GE15 | .GE16 | .GE22 | .GE23 | .GE24 | .GE25 | .GE26 | .GE33 | .GE34 | .GE35 | .GE36 | .GE44 | .GE45 | .GE46 | .GE55 | .GE56 | .GE66 |
%                                                                                           Расшифровка номеров сдвиговых компонент: 4 - 12, 5 - 23, 6 - 31
%
%    nu12*E2 = nu21*E1
%    nu23*E3 = nu32*E2
%    nu13*E3 = nu31*E1


global ErrCode;

global MAT2_orthotropic_tolerance_multiplier;
global MAT9_orthotropic_tolerance_multiplier;
global MAT2_C_zero_det_tolerance;
global MAT9_C_zero_det_tolerance;

fprintf (1, 'Проверка материалов...                  ');

for i=1:size(MATERIALS,1)
    
    switch MATERIALS{i}.card
        
        case 'MAT1'
            
            % Проверка на допустимость полей карточки
            if (~isempty(MATERIALS{i}.GE))
                if (MATERIALS{i}.GE ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            % Если не заданы никакие упругих константы
            if (isempty(MATERIALS{i}.E) && isempty(MATERIALS{i}.G) && isempty(MATERIALS{i}.NU))
                
                fprintf (1, '\nНе заданы упругие константы изотропного материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            % Если задана только одна константа
            if ((isempty(MATERIALS{i}.E) && isempty(MATERIALS{i}.G)) || (isempty(MATERIALS{i}.G) && isempty(MATERIALS{i}.NU)) || (isempty(MATERIALS{i}.E) && isempty(MATERIALS{i}.NU)))
                
                fprintf (1, '\nНедостаточно упругих констант для изотропного материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            % Если одновременно заданы все три константы
            if ((~isempty(MATERIALS{i}.E)) && (~isempty(MATERIALS{i}.G)) && (~isempty(MATERIALS{i}.NU)))
                
                % Проверка G
                if (MATERIALS{i}.G == 0)
                    fprintf (1, '\nНедопустимое значение модуля сдвига: G = %f для изотропного материала %s с номером %i [%s] !\n', MATERIALS{i}.G, MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                % Проверка nu
                if (MATERIALS{i}.NU == -1)
                    fprintf (1, '\nНедопустимое значение коэффициента Пуассона: nu = %f для изотропного материала %s с номером %i [%s] !\n', MATERIALS{i}.NU, MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                criterion = abs(1 - MATERIALS{i}.E/(2*(1+MATERIALS{i}.NU)*MATERIALS{i}.G));
                
                if (criterion >= 0.01)
                    
                    fprintf (1, '\nДля изотропного материала %s с номером %i [%s] заданы три несогласованные упругие константы E, G, nu !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Должно выполняться условие: G = E/(2*(1+nu))\n');
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                    
                end
                
                E = MATERIALS{i}.E;
                nu = MATERIALS{i}.NU;
                
            end
            
            % Если не задано E
            if (isempty(MATERIALS{i}.E))
                
                E = 2*(1+MATERIALS{i}.NU)*MATERIALS{i}.G;
                nu = MATERIALS{i}.NU;

            end
            
            % Если не задано G
            if (isempty(MATERIALS{i}.G))
                
                E = MATERIALS{i}.E;
                nu = MATERIALS{i}.NU;

            end
            
            % Если не задано nu
            if (isempty(MATERIALS{i}.NU))
                
                % Проверка G
                if (MATERIALS{i}.G <= 0)
                    fprintf (1, '\nНедопустимое значение модуля сдвига: G = %f для изотропного материала %s с номером %i [%s] !\n', MATERIALS{i}.G, MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                E = MATERIALS{i}.E;
                nu = MATERIALS{i}.E / 2 / MATERIALS{i}.G - 1;
                
            end
            
            % Проверка на допустимость значений
            if (E <= 0)
                fprintf (1, '\nНедопустимое значение модуля Юнга: E = %f для изотропного материала %s с номером %i [%s] !\n', E, MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end
            if ((nu <= -1) || (nu >= 0.5))
                fprintf (1, '\nНедопустимое значение коэффициента Пуассона: nu = %f для изотропного материала %s с номером %i [%s] !\n', nu, MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end
            
        case 'MAT2'
            
            % Проверка на допустимость полей карточки
            if (~isempty(MATERIALS{i}.GE))
                if (MATERIALS{i}.GE ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE11))
                if (MATERIALS{i}.GE11 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE11 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE11 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE12))
                if (MATERIALS{i}.GE12 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE12 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE12 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE13))
                if (MATERIALS{i}.GE13 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE13 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE13 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE22))
                if (MATERIALS{i}.GE22 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE22 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE22 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE23))
                if (MATERIALS{i}.GE23 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE23 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE23 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE33))
                if (MATERIALS{i}.GE33 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE33 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE33 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            % Если не заданы упругие константы
            
            if (isempty(MATERIALS{i}.G11))
                
                fprintf (1, '\nНе задана упругая константа G11 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G12))
                
                fprintf (1, '\nНе задана упругая константа G12 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G13))
                
                fprintf (1, '\nНе задана упругая константа G13 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G22))
                
                fprintf (1, '\nНе задана упругая константа G22 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G23))
                
                fprintf (1, '\nНе задана упругая константа G23 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G33))
                
                fprintf (1, '\nНе задана упругая константа G33 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            % Случай материала MAT2 без G13, G23, G33 для поля MID3 карточки PSHELL
            
            if ((MATERIALS{i}.G33 == 0) && (MATERIALS{i}.G23 == 0) && (MATERIALS{i}.G13 == 0))
                continue;
            end
            
            % Проверка инженерных констант
            
            trace_array = zeros(3,1);
            trace_array(1) = abs(MATERIALS{i}.G11);
            trace_array(2) = abs(MATERIALS{i}.G22);
            trace_array(3) = abs(MATERIALS{i}.G33);
            
            if (abs(MATERIALS{i}.G13) + abs(MATERIALS{i}.G23) < max(trace_array)*MAT2_orthotropic_tolerance_multiplier)
                
                C = zeros(3,3);
                
                C(1,1) = MATERIALS{i}.G11;
                C(1,2) = MATERIALS{i}.G12;
                C(2,1) = C(1,2);
                C(2,2) = MATERIALS{i}.G22;
                C(3,3) = MATERIALS{i}.G33;
                
                if (abs(det(C)) < MAT2_C_zero_det_tolerance)
                    fprintf (1, '\nОпределитель матрицы Гука равен 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                D = inv(C);
                
                E1 = 1/D(1,1);
                E2 = 1/D(2,2);
                G12 = 1/D(3,3);
                nu12 = -D(1,2)/D(1,1);
                nu21 = nu12*E2/E1;
                
                if (E1 <= 0)
                    fprintf (1, '\nМодуль E1 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (E2 <= 0)
                    fprintf (1, '\nМодуль E2 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (G12 <= 0)
                    fprintf (1, '\nМодуль G12 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (1 - nu12*nu21 <= 0)
                    fprintf (1, '\nНе выполнено соотношение 1 - nu12*nu21 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end

            end
            
        case 'MAT8'
            
            % Проверка на допустимость полей карточки
            if (~isempty(MATERIALS{i}.GE))
                if (MATERIALS{i}.GE ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            % Если не заданы упругие константы
            
            if (isempty(MATERIALS{i}.E1))
                
                fprintf (1, '\nНе задана упругая константа E1 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.E2))
                
                fprintf (1, '\nНе задана упругая константа E2 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.NU12))
                
                fprintf (1, '\nНе задана упругая константа NU12 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G12))
                
                fprintf (1, '\nНе задана упругая константа G12 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            % Проверка инженерных констант
            
            E1 = MATERIALS{i}.E1;
            E2 = MATERIALS{i}.E2;
            G12 = MATERIALS{i}.G12;
            nu12 = MATERIALS{i}.NU12;
            nu21 = nu12*E2/E1;

            if (E1 <= 0)
                fprintf (1, '\nМодуль E1 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end

            if (E2 <= 0)
                fprintf (1, '\nМодуль E2 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end

            if (G12 <= 0)
                fprintf (1, '\nМодуль G12 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end

            if (1 - nu12*nu21 <= 0)
                fprintf (1, '\nНе выполнено соотношение 1 - nu12*nu21 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(MATERIALS{i}.G1Z))
                G13 = MATERIALS{i}.G1Z;
                if (G13 <= 0)
                    fprintf (1, '\nМодуль G13 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.G2Z))
                G23 = MATERIALS{i}.G2Z;
                if (G23 <= 0)
                    fprintf (1, '\nМодуль G23 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
        case 'MAT9'
            
            % Проверка на допустимость полей карточки
            if (~isempty(MATERIALS{i}.GE))
                if (MATERIALS{i}.GE ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE11))
                if (MATERIALS{i}.GE11 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE11 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE11 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE12))
                if (MATERIALS{i}.GE12 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE12 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE12 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE13))
                if (MATERIALS{i}.GE13 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE13 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE13 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE14))
                if (MATERIALS{i}.GE14 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE14 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE14 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE15))
                if (MATERIALS{i}.GE15 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE15 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE15 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE16))
                if (MATERIALS{i}.GE16 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE16 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE16 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE22))
                if (MATERIALS{i}.GE22 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE22 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE22 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE23))
                if (MATERIALS{i}.GE23 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE23 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE23 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE24))
                if (MATERIALS{i}.GE24 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE24 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE24 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE25))
                if (MATERIALS{i}.GE25 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE25 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE25 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE26))
                if (MATERIALS{i}.GE26 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE26 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE26 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE33))
                if (MATERIALS{i}.GE33 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE33 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE33 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE34))
                if (MATERIALS{i}.GE34 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE34 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE34 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE35))
                if (MATERIALS{i}.GE35 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE35 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE35 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE36))
                if (MATERIALS{i}.GE36 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE36 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE36 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE44))
                if (MATERIALS{i}.GE44 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE44 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE44 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE45))
                if (MATERIALS{i}.GE45 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE45 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE45 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE46))
                if (MATERIALS{i}.GE46 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE46 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE46 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE55))
                if (MATERIALS{i}.GE55 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE55 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE55 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE56))
                if (MATERIALS{i}.GE56 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE56 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE56 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(MATERIALS{i}.GE66))
                if (MATERIALS{i}.GE66 ~= 0)
                    fprintf (1, '\nОбнаружена ненулевая запись GE66 в карточке материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Карточки %s c ненулевым полем GE66 не поддерживаются в текущей версии программы.\n', MATERIALS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            % Если не заданы упругие константы
            
            if (isempty(MATERIALS{i}.G11))
                
                fprintf (1, '\nНе задана упругая константа G11 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G12))
                
                fprintf (1, '\nНе задана упругая константа G12 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G13))
                
                fprintf (1, '\nНе задана упругая константа G13 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G14))
                
                fprintf (1, '\nНе задана упругая константа G14 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G15))
                
                fprintf (1, '\nНе задана упругая константа G15 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G16))
                
                fprintf (1, '\nНе задана упругая константа G16 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G22))
                
                fprintf (1, '\nНе задана упругая константа G22 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G23))
                
                fprintf (1, '\nНе задана упругая константа G23 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G24))
                
                fprintf (1, '\nНе задана упругая константа G24 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G25))
                
                fprintf (1, '\nНе задана упругая константа G25 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G26))
                
                fprintf (1, '\nНе задана упругая константа G26 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G33))
                
                fprintf (1, '\nНе задана упругая константа G33 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G34))
                
                fprintf (1, '\nНе задана упругая константа G34 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G35))
                
                fprintf (1, '\nНе задана упругая константа G35 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G36))
                
                fprintf (1, '\nНе задана упругая константа G36 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G44))
                
                fprintf (1, '\nНе задана упругая константа G44 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G45))
                
                fprintf (1, '\nНе задана упругая константа G45 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G46))
                
                fprintf (1, '\nНе задана упругая константа G46 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G55))
                
                fprintf (1, '\nНе задана упругая константа G55 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G56))
                
                fprintf (1, '\nНе задана упругая константа G56 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            if (isempty(MATERIALS{i}.G66))
                
                fprintf (1, '\nНе задана упругая константа G66 материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                ErrCode = -1;
                return;
                
            end
            
            % Проверка инженерных констант
            
            trace_array = zeros(6,1);
            trace_array(1) = abs(MATERIALS{i}.G11);
            trace_array(2) = abs(MATERIALS{i}.G22);
            trace_array(3) = abs(MATERIALS{i}.G33);
            trace_array(4) = abs(MATERIALS{i}.G44);
            trace_array(5) = abs(MATERIALS{i}.G55);
            trace_array(6) = abs(MATERIALS{i}.G66);
            
            if (abs(MATERIALS{i}.G14) + abs(MATERIALS{i}.G15) + abs(MATERIALS{i}.G16) + ...
                abs(MATERIALS{i}.G24) + abs(MATERIALS{i}.G25) + abs(MATERIALS{i}.G26) + ...
                abs(MATERIALS{i}.G34) + abs(MATERIALS{i}.G35) + abs(MATERIALS{i}.G36) + ...
                                        abs(MATERIALS{i}.G45) + abs(MATERIALS{i}.G46) + ...
                                                                abs(MATERIALS{i}.G56) < max(trace_array)*MAT9_orthotropic_tolerance_multiplier)
                
                C = zeros(6,6);
                
                C(1,1) = MATERIALS{i}.G11;
                C(1,2) = MATERIALS{i}.G12;
                C(1,3) = MATERIALS{i}.G13;
                
                C(2,1) = C(1,2);
                C(2,2) = MATERIALS{i}.G22;
                C(2,3) = MATERIALS{i}.G23;
                
                C(3,1) = C(1,3);
                C(3,2) = C(2,3);
                C(3,3) = MATERIALS{i}.G33;
                
                C(4,4) = MATERIALS{i}.G44;
                C(5,5) = MATERIALS{i}.G55;
                C(6,6) = MATERIALS{i}.G66;
                
                if (abs(det(C)) < MAT9_C_zero_det_tolerance)
                    fprintf (1, '\nОпределитель матрицы Гука равен 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                D = inv(C);
                
                E1 = 1/D(1,1);
                E2 = 1/D(2,2);
                E3 = 1/D(3,3);
                
                G12 = 1/D(4,4);
                G23 = 1/D(5,5);
                G13 = 1/D(6,6);
                
                nu12 = -D(1,2)/D(1,1);
                nu21 = nu12*E2/E1;
                
                nu23 = -D(2,3)/D(2,2);
                nu32 = nu23*E3/E2;
                
                nu13 = -D(1,3)/D(1,1);
                nu31 = nu13*E3/E1;
                
                if (E1 <= 0)
                    fprintf (1, '\nМодуль E1 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (E2 <= 0)
                    fprintf (1, '\nМодуль E2 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (E3 <= 0)
                    fprintf (1, '\nМодуль E3 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (G12 <= 0)
                    fprintf (1, '\nМодуль G12 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (G23 <= 0)
                    fprintf (1, '\nМодуль G23 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (G13 <= 0)
                    fprintf (1, '\nМодуль G13 <=0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (1 - nu12*nu21 <= 0)
                    fprintf (1, '\nНе выполнено соотношение 1 - nu12*nu21 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (1 - nu23*nu32 <= 0)
                    fprintf (1, '\nНе выполнено соотношение 1 - nu23*nu32 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (1 - nu13*nu31 <= 0)
                    fprintf (1, '\nНе выполнено соотношение 1 - nu13*nu31 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end
                
                if (1 - nu12*nu21 - nu23*nu32 - nu13*nu31 - 2*nu21*nu32*nu13 <= 0)
                    fprintf (1, '\nНе выполнено соотношение 1 - nu12*nu21 - nu23*nu32 - nu13*nu31 - 2*nu21*nu32*nu13 > 0 для материала %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
                    fprintf (1, 'Отредактируйте свойства материала в базе с моделью.\n');
                    ErrCode = -1;
                    return;
                end

            end
            
        otherwise
            
            fprintf (1, '\nНеизвестная карточка с материалом %s с номером %i [%s] !\n', MATERIALS{i}.Patran_name, MATERIALS{i}.ID, MATERIALS{i}.card);
            ErrCode = -1;
            return;
        
    end
    
end

fprintf (1, 'OK!\n');
